<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Class Mrest extends MY_Model
{
    public function __construct()
    {
        parent::__construct();
    }
    
    public function getRestTimeDb($number,$offset)
    {
        
        $crew_id                = $this->getParamInt('crew-list');
        $start_date_search      = $this->getParamString('start-date-search');
        $end_date_search        = $this->getParamString('end-date-search');
                
        $limit = $offset ? intval($offset) : '0';
        
        $sql = "SELECT c.fullname, c.rank, r.*  FROM crew AS c INNER JOIN rest_time_crew AS r ON c.crew_id = r.crew_id WHERE 1=1 ";
        
        if(!in_array($crew_id, array(null, '', '0')))
        {
            $sql .= " AND c.crew_id = '$crew_id' ";
        }
        
        if($start_date_search && $end_date_search)
        {
            $sql .= " AND ( r.rest_day BETWEEN '$start_date_search' AND '$end_date_search' ) ";
        }
        if($start_date_search && !$end_date_search)
        {
            //$tsp = $start_date_search + 60*60;
            $sql .= " AND r.rest_day = '$start_date_search' ";
        }
        if(!$start_date_search && $end_date_search)
        {
            //$tsp = $end_date_search + 60*60;
            $sql .= " AND r.rest_day <= '$end_date_search' ";
        }
        
        $sql .= " ORDER BY r.rest_day ASC";
        //echo $sql; die("run");
        
        $xdata = " LIMIT ".$limit.",".$number." ";
        $xs = $this->db->query($sql.$xdata)->result_object();
        $count = $this->db->query($sql)->num_rows();
        return array('data' => $xs, 'count' => $count);
        
    }
    
    public function addRestTimeDb()
    {
        $crew_id            = $this->getParamString('crew-list');
        $date_rest         = $this->getParamString('date-rest');
        
        $start_crest_time = (float)$this->getParamString('start-crest-time');
        $end_crest_time = (float)$this->getParamString('end-crest-time');
        
        if($start_crest_time < $end_crest_time){
            $sum_rest_time = $end_crest_time - $start_crest_time;
        }
        else{
            $sum_rest_time = (24 - $start_crest_time) + $end_crest_time;
        }
        
        $type         = $this->getParamString('ect-crest');
        $note   = $this->getParamString('note-crest-time');
        
        
        //ADDED start_rest_time_tsp and end_rest_time_tsp 2/4/2015 for validate
        $date_rest_format = date("d-m-Y", strtotime($date_rest));
        
        if(strpos($start_crest_time, '.5'))
        {
            $start_crest_time_format = str_replace('.5',':30',$start_crest_time).':00';
        }
        else{
            $start_crest_time_format = $start_crest_time.':00:00';
        }
        
        $start_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format);
        $end_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format) + $sum_rest_time *60*60 ;  
        
        $rank_id = $this->checkRank($crew_id, $date_rest, $start_crest_time, $start_rest_time_tsp, $type);
        if($type == 2){$type = 1;}
        
        $data = array(
                        'crew_id'               => $crew_id,
                        'rest_day'              => $date_rest,
                        'rest_time_from'        => $start_crest_time,
                        'rest_time_to'          => $end_crest_time,
                        'sum_rest_time'         => $sum_rest_time,
                        'type'                  => $type,
                        'note'                  => $note,
                        'start_rest_time_tsp'   => $start_rest_time_tsp,
                        'end_rest_time_tsp'     => $end_rest_time_tsp,
                        'rank_id'               => $rank_id,
                        'created'               => date('Y-m-d H:i:s')
                    );
        
        $this->db->insert('rest_time_crew', $data);
        $id = $this->db->insert_id();
        
        return 200;
    }
    
    //CHECK insert rank
    public function checkRank($crew_id = '', $date_rest, $start_crest_time, $start_rest_time_tsp, $type = 1)
    {
        
        $rank = $this->db->query('SELECT * FROM rank WHERE crew_id = '.$crew_id.' ORDER BY rank_id DESC LIMIT 1' )->row_array();
        
        if($rank && $rank['type'] == $type )
        {
            return $rank['rank_id']; 
        }
        else
        {
            if($type == 2){ $type = 1; }
            
            $data = array(
                            'crew_id'                   => $crew_id,
                            'type'                      => $type,
                            'flag_start_rest_hour'      => $start_crest_time,
                            'flag_start_rest_day'       => $date_rest,
                            'flag_start_rest_tsp'       => $start_rest_time_tsp
                    );
            $this->db->insert('rank', $data);
            $rank_id = $this->db->insert_id();
            return $rank_id;
        }
    } 
        
    public function editRestTimeDb($id, $crew_id, $date_rest, $type)
    {
        
        $start_crest_time = (float)$this->getParamString('start-crest-time');
        $end_crest_time = (float)$this->getParamString('end-crest-time');
        $note   = $this->getParamString('note-crest-time');
        
        if($start_crest_time < $end_crest_time){
            $sum_rest_time = $end_crest_time - $start_crest_time;
        }
        else{
            $sum_rest_time = (24 - $start_crest_time) + $end_crest_time;
        }
        
        //ADDED start_rest_time_tsp and end_rest_time_tsp 2/4/2015 for validate
        $date_rest_format = date("d-m-Y", strtotime($date_rest));
        
        if(strpos($start_crest_time, '.5'))
        {
            $start_crest_time_format = str_replace('.5',':30',$start_crest_time).':00';
        }
        else{
            $start_crest_time_format = $start_crest_time.':00:00';
        }
        
        $start_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format); 
        $end_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format) + $sum_rest_time *60*60 ;  
        
        if($type == 2){$type = 1;}
        $data = array(
                        'rest_time_from'        => $start_crest_time,
                        'rest_time_to'          => $end_crest_time,
                        'sum_rest_time'         => $sum_rest_time,
                        'note'                  => $note,
                        'start_rest_time_tsp'   => $start_rest_time_tsp,
                        'end_rest_time_tsp'     => $end_rest_time_tsp
                    );
        
        $this->db->update('rest_time_crew', $data,"id = ".$id."");
        
        return 200;
    }
    
    public function crewOption($crew_id = '')
    {
        $data = $this->db->query('SELECT crew_id, fullname FROM crew ORDER BY crew_id ASC')->result_array();
        $html  = '';
        
        foreach($data AS $key=>$val)
        {
            if($crew_id == $val['crew_id'])
            {
                $selected = 'selected="selected"';
            }else{
                $selected = '';
            }
            $html .= '<option value="'.$val['crew_id'].'" '.$selected.'>'.$val['fullname'].'</option>';
        }
        return $html;
    }
    
    public function getRestTimeEdit($id)
    {
        $var = $this->db->query('SELECT * FROM rest_time_crew WHERE id = '.$id)->row_object();
        return $var;
    }
    
    public function deleteRestTimeDB($id = '')
    {
        $this->db->delete('rest_time_crew',"id = ".$id);
        return 200;
    }
    
    public function timeOption($time = '')
    {
        $arr = array(   '0'       =>  " 0h00' ",
                        '1'       =>  " 1h00' ",
                        '1.5'     =>  " 1h30' ",
                        '2'       =>  " 2h00' ",
                        '2.5'     =>  " 2h30' ",
                        '3'       =>  " 3h00' ",
                        '3.5'     =>  " 3h30' ",
                        '4'       =>  " 4h00' ",
                        '4.5'     =>  " 4h30' ",
                        '5'       =>  " 5h00' ",
                        '5.5'     =>  " 5h30' ",
                        '6'       =>  " 6h00' ",
                        '6.5'     =>  " 6h30' ",
                        '7'       =>  " 7h00' ",
                        '7.5'     =>  " 7h30' ",
                        '8'       =>  " 8h00' ",
                        '8.5'     =>  " 8h30' ",
                        '9'       =>  " 9h00' ",
                        '9.5'     =>  " 9h30' ",
                        '10'      =>  " 10h00' ",
                        '10.5'    =>  " 10h30' ",
                        '11'      =>  " 11h00' ",
                        '11.5'    =>  " 11h30' ",
                        '12'      =>  " 12h00' ",
                        '12.5'    =>  " 12h30' ",
                        '13'      =>  " 13h00' ",
                        '13.5'    =>  " 13h30' ",
                        '14'      =>  " 14h00' ",
                        '14.5'    =>  " 14h30' ",
                        '15'      =>  " 15h00' ",
                        '15.5'    =>  " 15h30' ",
                        '16'      =>  " 16h00' ",
                        '16.5'    =>  " 16h30' ",
                        '17'      =>  " 17h00' ",
                        '17.5'    =>  " 17h30' ",
                        '18'      =>  " 18h00' ",
                        '18.5'    =>  " 18h30' ",
                        '19'      =>  " 19h00' ",
                        '19.5'    =>  " 19h30' ",
                        '20'      =>  " 20h00' ",
                        '20.5'    =>  " 20h30' ",
                        '21'      =>  " 21h00' ",
                        '21.5'    =>  " 21h30' ",
                        '22'      =>  " 22h00' ",
                        '22.5'    =>  " 22h30' ",
                        '23'      =>  " 23h00' ",
                        '23.5'    =>  " 23h30' ",
                        '24'      =>  " 24h00' ",
                    );
                    
        $html  = '';
        
        foreach($arr AS $key=>$val)
        {
            //echo("<pre>");
            //var_dump($key);
            if($time == $key)
            {
                $selected = 'selected="selected"';
            }else{
                $selected = '';
            }
            $html .= '<option value="'.$key.'" '.$selected.'>'.$val.'</option>';
        }
        return $html;
    }
    
    public function exceptionOption($ect = '')
    {
        $arr = array(   1       =>  " Không ngoại lệ ",
                        2       =>  " Ngay trước giai đoạn nghỉ ngơi này là trường hợp khẩn cấp ",
                        3       =>  " Giai đoạn tập trung, thực tập cứu sinh... "
                    );
                    
        $html  = '';
        
        foreach($arr AS $key=>$val)
        {
            
            if($ect == $key)
            {
                $selected = 'selected="selected"';
            }else{
                $selected = '';
            }
            $html .= '<option value="'.$key.'" '.$selected.'>'.$val.'</option>';
        }
        return $html;
    }
    
    public function validateAddRest($crew_id = '', $date_rest = '', $start_crest_time = '', $end_crest_time = '', $type = '' )
    {
        $message = '';
      
        if(!$crew_id || $crew_id == -1 ){
            $message = '- Tên thuyền viên không được để trống.<br>';
        }
        if(!$date_rest){
            $message .= '- Ngày nghỉ không được để trống.<br>';
        }
        if($start_crest_time == -1 ){
            $message .= '- Thời gian bắt đầu nghỉ không được để trống.<br>';
        }
        if($end_crest_time == -1 ){
            $message .= '- Thời gian kết thúc nghỉ không được để trống.<br>';
        }
        
        //TINH TONG GIO NGHI POST TU FORM
        if($start_crest_time < $end_crest_time)
        {
            $sum_rest_time = $end_crest_time - $start_crest_time;
        }
        else{
            $sum_rest_time = (24 - $start_crest_time) + $end_crest_time;
        }
        
        //THỰC TẬP CỨU SINH MOI GIAI DOAN IT NHAT 1h
        if($sum_rest_time < 1 && $type == 3)
        {
            $message .= '- Giai đoạn tập trung, thực tập cứu sinh, mỗi giai đoạn nghỉ ít nhất 1h.<br>';    
        }
        
        //GIỜ NGHỈ MỚI KHÔNG ĐƯỢC BÉ HƠN THỜI GIAN NGHỈ CUỐI
        $lt = $this->db->query('SELECT * FROM rest_time_crew WHERE crew_id = '.$crew_id.' ORDER BY id DESC LIMIT 1' )->row_array();
        
        $drf = date("d-m-Y", strtotime($date_rest));
                    
        if(strpos($start_crest_time, '.5'))
        {
            $st_format = str_replace('.5',':30',$start_crest_time).':00';
        }
        else{
            $st_format = $start_crest_time.':00:00';
        }
        
        $srt = strtotime($drf. $st_format);
         
        if($lt['end_rest_time_tsp'] > $srt)
        {
            $message .= '- Giờ bắt đầu nghỉ mới không được nhỏ hơn giờ kết thúc nghỉ liền trước đó';
        }
        
        //--------- TYPE = 1 OR 2 -------------
        $dataLastDay = $this->getDataLastDay($crew_id, $date_rest, $start_crest_time, $type);
        //var_dump($dataLastDay);die("abc");
        if($dataLastDay && $dataLastDay['check_sum_rest'] < 10 && $dataLastDay['is_date_start'] == false)
        {
            $message .= '- Trong khoảng 24h trước, thuyền viên này chưa nghỉ đủ 10h. (Tổng giờ nghỉ ngày hôm trước: '.$dataLastDay['check_sum_rest'].'h).<br>';
        }
        if($dataLastDay)
        {
            
            if($type == 1 || $type == 2)
            {
                if($type == 2){$type = 1;}
                $data24h = $this->getRestTimeIn24h($crew_id, $date_rest, $start_crest_time, $type);
                //var_dump($data24h);die("data 24h bị sai rồi à?");
                $num_of_rest_in_24h = count($data24h);
                // toi da 2 luot nghi
                if($num_of_rest_in_24h == 2 )
                {
                    $message .= '- Trong khoảng 24h chỉ được tối đa 2 lượt nghỉ.<br>';
                }
                
                if($num_of_rest_in_24h == 1 )
                {
                    
                    // tong gio nghi toi thieu = 10
                    $check_sum_rest = $sum_rest_time + $data24h[0]['sum_rest_time'];
                    //die($check_sum_rest);
                    if( $check_sum_rest < 10 ){
                        $message .= '- Tổng thời gian nghỉ trong khoảng 24h tối thiểu là 10h.<br>';
                    }
                    
                    // 1 luot nghi toi thieu 6h
                    if($sum_rest_time < 6 && $data24h[0]['sum_rest_time'] <6 ){
                        $message .= '- Trong khoảng 24h phải có 1 lượt nghỉ ít nhất 6h.<br>';
                    }
                    
                    
                    // Thoi gian giua 2 dot nghi lien tiep khong qua 14h
                    $date_rest_format = date("d-m-Y", strtotime($date_rest));
                    
                    if(strpos($start_crest_time, '.5'))
                    {
                        $start_crest_time_format = str_replace('.5',':30',$start_crest_time).':00';
                    }
                    else{
                        $start_crest_time_format = $start_crest_time.':00:00';
                    }
                    
                    $start_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format); 
                    if($start_rest_time_tsp > $data24h[0]['end_rest_time_tsp'] + 14*60*60 ){
                        $message .= '- Thời gian giữa 2 lần nghỉ liên tiếp không quá 14h.<br>';
                    }
                    
                    //Trong 7 ngay it nhat 77h nghi
                    $check7d = $this->check7Day($crew_id, $start_rest_time_tsp, $type);
                    if($check7d['num7d'] >= 7)
                    {
                        $list_7date = '';
                        foreach($check7d['list7d'] AS $key => $val){
                            $list_7date .= "'".$val->rest_day."',";
                        }
                        $list_7date = substr($list_7date,0,-1);
                        
                        $sum_hour_7d = $this->db->query('SELECT SUM(sum_rest_time) AS sum_rest_hour FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND rest_day IN ('.$list_7date.') ')->row_array();
                        //var_dump($sum_hour_7d['sum_rest_hour']);
                        if($sum_hour_7d['sum_rest_hour'] < 77)
                        {
                            $message .= '- Trong 7 ngày vừa qua, tổng số giờ nghỉ chưa đủ 77h.<br>';  
                        }
                    }
                
                }
            }
            
            //--------- TYPE = 3  -------------
            if($type == 3)
            {
                
                $data24h = $this->getRestTimeIn24h($crew_id, $date_rest, $start_crest_time, $type);
                //echo("<pre>");
                //var_dump($data24h);die("vao day");
                $num_of_rest_in_24h = count($data24h);
                
                // TOI DA 3 LUOT NGHI
                if($num_of_rest_in_24h == 3 )
                {
                    $message .= '- Giai đoạn tập trung, thực tập cứu sinh, trong khoảng 24h chỉ được tối đa 3 lượt nghỉ.<br>';
                }
                
                if($num_of_rest_in_24h == 2 )
                {
                    $check_sum_rest = 0;
                    $have6h = false;
                    if($data24h)
                    {
                        foreach($data24h AS $key => $val)
                        {
                            $check_sum_rest += $val['sum_rest_time'];
                            if($val['sum_rest_time'] >= 6){
                                $have6h = true;
                            }
                             
                        }
                        // tong gio nghi toi thieu = 10 ******
                        $check_sum_rest = $sum_rest_time + $check_sum_rest;
                        //die($check_sum_rest);
                        if( $check_sum_rest < 10 ){
                            $message .= '- Tổng thời gian nghỉ trong khoảng 24h tối thiểu là 10h.<br>';
                        }
                        
                        // 1 luot nghi toi thieu 6h ******
                        if($sum_rest_time < 6 && $have6h == false ){
                            $message .= '- Trong khoảng 24h phải có 1 lượt nghỉ ít nhất 6h.<br>';
                        }
                    }
                    
                    
                    // Thoi gian giua 2 dot nghi lien tiep khong qua 14h
                    $date_rest_format = date("d-m-Y", strtotime($date_rest));
                    
                    if(strpos($start_crest_time, '.5'))
                    {
                        $start_crest_time_format = str_replace('.5',':30',$start_crest_time).':00';
                    }
                    else{
                        $start_crest_time_format = $start_crest_time.':00:00';
                    }
                    
                    $start_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format);
                    
                    if($start_rest_time_tsp > $data24h[0]['end_rest_time_tsp'] + 14*60*60 ){
                        $message .= '- Thời gian giữa 2 lần nghỉ liên tiếp không quá 14h.<br>';
                    }
                    
                    //Trong 7 ngay it nhat 70h nghi
                    $check7d = $this->check7Day($crew_id, $start_rest_time_tsp, $type);
                    if($check7d['num7d'] >= 7)
                    {
                        $list_7date = '';
                        foreach($check7d['list7d'] AS $key => $val){
                            $list_7date .= "'".$val->rest_day."',";
                        }
                        $list_7date = substr($list_7date,0,-1);
                        
                        $sum_hour_7d = $this->db->query('SELECT SUM(sum_rest_time) AS sum_rest_hour FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND rest_day IN ('.$list_7date.') ')->row_array();
                        //var_dump($sum_hour_7d['sum_rest_hour']);
                        if($sum_hour_7d['sum_rest_hour'] < 70)
                        {
                            $message .= '- Giai đoạn tập trung, thực tập cứu sinh, trong 7 ngày vừa qua, tổng số giờ nghỉ chưa đủ 70h.<br>';  
                        }
                    }
                    
                    //Thoi gian ap dung ngoai le Tap trung, thuc tap cuu sinh khong qua 2 tuan lien tiep 
                    
                    //tinh rank (gio bat dau nghi lan dau tien cua 1 giai doan) 
                    $flag_start = $this->db->query('SELECT * FROM rank WHERE crew_id = '.$crew_id.' AND type = '.$type.' ORDER BY rank_id DESC LIMIT 1' )->row_array();
                    
                    $end = strtotime('+14 days', $flag_start['flag_start_rest_tsp']);
                    //var_dump($end);
                    if($start_rest_time_tsp > $end )
                    {
                        $message .= '- Thời gian áp dụng ngoại lệ tập trung, thực tập cứu sinh... không quá 2 tuần liên tiếp.<br>';
                    }
                    
                    // Khoang thoi gian giua 2 lan ap dung ngoai le khong it hon 2 lan khoang thoi gian cua giai doan da ap dung ngoai le truoc do.
                    /*
                    $sql = $this->db->query('SELECT * FROM rank WHERE crew_id = '.$crew_id.' ORDER BY rank_id DESC LIMIT 2' )->result_array();
                    
                    $intervals_exception = $sql[0]['flag_start_rest_tsp'] -$sql[1]['flag_start_rest_tsp']; 
                    
                    if($start_rest_time_tsp < $sql[0]['flag_start_rest_tsp'] + $intervals_exception * 2 )
                    {
                        $message .= '- Khoảng thời gian giữa 2 lần áp dụng ngoại lệ không ít hơn 2 lần khoảng thời gian của giai đoạn đã áp dụng ngoại lệ trước đó.<br>';
                    }
                    */
                    //---- COMPLETED -----                
                
                }
            }
        }
            
        return $message;
        
    }
    
    public function getRestTimeIn24h($crew_id, $date_rest, $start_crest_time, $type)
    {
        //ngay nghi post tu form
        $date_rest_format = date("d-m-Y", strtotime($date_rest));
        
        //tinh rank (gio bat dau nghi lan dau tien cua 1 giai doan) 
        $flag_start = $this->db->query('SELECT * FROM rank WHERE crew_id = '.$crew_id.' AND type = '.$type.' ORDER BY rank_id DESC LIMIT 1' )->row_array();
        if($flag_start){
            $flag_start_hour = $flag_start['flag_start_rest_hour'];
        }
        else{
            $flag_start_hour = $start_crest_time;
        }
        
        //Convert hour
        if(strpos($flag_start_hour, '.5'))
        {
            $flag_start_hour_format = str_replace('.5',':30', $flag_start_hour).':00';
        }
        else{
            $flag_start_hour_format = $flag_start_hour.':00:00';
        }
        
        // thoi diem bat dau 1 chu ky 24h
        $bw_start = strtotime($date_rest_format. $flag_start_hour_format); 
        // thoi diem ket thuc 1 chu ky 24h
        $bw_end = strtotime('+1 days', $bw_start);
        //echo $a = 'SELECT * FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND ( start_rest_time_tsp BETWEEN '.$bw_start.' AND '.$bw_end.' ) ORDER BY id DESC '; 
        //die("shita");
        $data = $this->db->query('SELECT * FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND ( start_rest_time_tsp BETWEEN '.$bw_start.' AND '.$bw_end.' ) ORDER BY id DESC ' )->result_array();
        return $data;
    }
    
    public function check7Day($crew_id, $start_rest_time_tsp, $type)
    {
        $sql = 'SELECT rest_day FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND start_rest_time_tsp <= '.$start_rest_time_tsp.' GROUP BY rest_day ORDER BY id DESC LIMIT 7 ';
        
        $data['num7d'] = $this->db->query($sql)->num_rows();
        $data['list7d'] = $this->db->query($sql)->result_object();
        
        return $data;
    }
    
    public function validateEditRest($crew_id = '', $date_rest = '', $start_crest_time = '', $end_crest_time = '', $type = '' )
    {
        $message = '';
        $id = $this->getParamInt('id');
        
        if($start_crest_time == -1 ){
            $message .= '- Thời gian bắt đầu nghỉ không được để trống.<br>';
        }
        if($end_crest_time == -1 ){
            $message .= '- Thời gian kết thúc nghỉ không được để trống.<br>';
        }
        //$tst = strtotime(date("d-m-Y H:i:s"));
        //$date = date("d-m-Y", $tst);
        
        //TINH TONG GIO NGHI POST TU FORM
        if($start_crest_time < $end_crest_time)
        {
            $sum_rest_time = $end_crest_time - $start_crest_time;
        }
        else{
            $sum_rest_time = (24 - $start_crest_time) + $end_crest_time;
        }
        
        //THỰC TẬP CỨU SINH MOI GIAI DOAN IT NHAT 1h
        if($sum_rest_time < 1 && $type == 3)
        {
            $message .= '- Giai đoạn tập trung, thực tập cứu sinh, mỗi giai đoạn nghỉ ít nhất 1h.<br>';    
        }
        
        $data24h = $this->getRestTimeIn24h($crew_id, $date_rest, $start_crest_time, $type);
        $num_of_rest_in_24h = count($data24h);
        //--------- TYPE = 1 -----------
        
        if($type == 1)
        {
            // tong gio nghi toi thieu = 10 ******
            $check_sum_rest = 0;
            $have6h = false;
            if($data24h)
            {
                foreach($data24h AS $key => $val)
                {
                    if($val['id'] != $id)
                    {
                        $check_sum_rest += $val['sum_rest_time'];    
                    }
                    
                    if($val['sum_rest_time'] >= 6){
                        $have6h = true;
                    }
                     
                }
                // tong gio nghi toi thieu = 10 ******
                $check_sum_rest = $sum_rest_time + $check_sum_rest;
                //die($check_sum_rest);
                if( $check_sum_rest < 10 ){
                    $message .= '- Tổng thời gian nghỉ trong khoảng 24h tối thiểu là 10h.<br>';
                }
                
                // 1 luot nghi toi thieu 6h ******
                if($sum_rest_time < 6 && $have6h == false ){
                    $message .= '- Trong khoảng 24h phải có 1 lượt nghỉ ít nhất 6h.<br>';
                }
            }
            
            //Trong 7 ngay it nhat 77h nghi
            $date_rest_format = date("d-m-Y", strtotime($date_rest));
                
            if(strpos($start_crest_time, '.5'))
            {
                $start_crest_time_format = str_replace('.5',':30',$start_crest_time).':00';
            }
            else{
                $start_crest_time_format = $start_crest_time.':00:00';
            }
            $start_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format);
                
            $check7d = $this->check7Day($crew_id, $start_rest_time_tsp, $type);
            if($check7d['num7d'] >= 7)
            {
                $list_7date = '';
                foreach($check7d['list7d'] AS $key => $val){
                    $list_7date .= "'".$val->rest_day."',";
                }
                $list_7date = substr($list_7date,0,-1);
                
                $sum_hour_7d = $this->db->query('SELECT SUM(sum_rest_time) AS sum_rest_hour FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND rest_day IN ('.$list_7date.') ')->row_array();
                //var_dump($sum_hour_7d['sum_rest_hour']);
                if($sum_hour_7d['sum_rest_hour'] < 77)
                {
                    $message .= '- Trong 7 ngày vừa qua, tổng số giờ nghỉ chưa đủ 77h.<br>';  
                }
            }
        }
        
        //--------- TYPE = 3  -------------
        if($type == 3)
        {
            
            $check_sum_rest = 0;
            $have6h = false;
            if($data24h)
            {
                foreach($data24h AS $key => $val)
                {
                    if($val['id'] != $id)
                    {
                        $check_sum_rest += $val['sum_rest_time'];
                        
                        if($val['sum_rest_time'] >= 6){
                            $have6h = true;
                        }    
                    }
                    
                }
                // tong gio nghi toi thieu = 10 ******
                $check_sum_rest = $sum_rest_time + $check_sum_rest;
                //die($check_sum_rest);
                if( $check_sum_rest < 10 ){
                    $message .= '- Tổng thời gian nghỉ trong khoảng 24h tối thiểu là 10h.<br>';
                }
                
                // 1 luot nghi toi thieu 6h ******
                if($sum_rest_time < 6 && $have6h == false ){
                    $message .= '- Trong khoảng 24h phải có 1 lượt nghỉ ít nhất 6h.<br>';
                }
            }
            
            //Trong 7 ngay it nhat 70h nghi
            $date_rest_format = date("d-m-Y", strtotime($date_rest));
                
            if(strpos($start_crest_time, '.5'))
            {
                $start_crest_time_format = str_replace('.5',':30',$start_crest_time).':00';
            }
            else{
                $start_crest_time_format = $start_crest_time.':00:00';
            }
            $start_rest_time_tsp = strtotime($date_rest_format. $start_crest_time_format);
            
            $check7d = $this->check7Day($crew_id, $start_rest_time_tsp, $type);
            if($check7d['num7d'] >= 3)
            {
                $list_7date = '';
                foreach($check7d['list7d'] AS $key => $val){
                    $list_7date .= "'".$val->rest_day."',";
                }
                $list_7date = substr($list_7date,0,-1);
                
                $sum_hour_7d = $this->db->query('SELECT SUM(sum_rest_time) AS sum_rest_hour FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND rest_day IN ('.$list_7date.') ')->row_array();
                //var_dump($sum_hour_7d['sum_rest_hour']);
                if($sum_hour_7d['sum_rest_hour'] < 70)
                {
                    $message .= '- Giai đoạn tập trung, thực tập cứu sinh, trong 7 ngày vừa qua, tổng số giờ nghỉ chưa đủ 70h.<br>';  
                }
            }
            //---- COMPLETED -----                
            
        }
            
        return $message;
        
    }
    
    //Tinh gio nghi ngoi cua ngay lien truoc do
    public function getDataLastDay($crew_id, $date_rest, $start_crest_time, $type)
    {
        //ngay nghi post tu form
        $date_rest_format = date("d-m-Y", strtotime($date_rest));
        
        //tinh rank (gio bat dau nghi lan dau tien cua 1 giai doan) 
        $flag_start = $this->db->query('SELECT * FROM rank WHERE crew_id = '.$crew_id.' AND type = '.$type.' ORDER BY rank_id DESC LIMIT 1' )->row_array();
        if($flag_start){
            $flag_start_hour = $flag_start['flag_start_rest_hour'];
        }
        else{
            $flag_start_hour = $start_crest_time;
        }
        
        //Convert hour
        if(strpos($flag_start_hour, '.5'))
        {
            $flag_start_hour_format = str_replace('.5',':30', $flag_start_hour).':00';
        }
        else{
            $flag_start_hour_format = $flag_start_hour.':00:00';
        }
        
        // thoi diem bat dau 1 chu ky 24h cua ngay truoc do
        $last_date = date( "d-m-Y", strtotime('-1 days', strtotime($date_rest_format)));
        //var_dump($last_date);
        $bw_start = strtotime($last_date. $flag_start_hour_format); 
        // thoi diem ket thuc 1 chu ky 24h
        $bw_end = strtotime('+1 days', $bw_start);
        
        //Check new rank (Neu rank moi chi co 1 ban ghi thi khong check truong hop add trọn vẹn ngày trước mới cho add ngày sau)
        if($flag_start)
        {
            $record_of_new_rank = $this->db->query(' SELECT rt.*, r.*  FROM rest_time_crew AS rt INNER JOIN rank AS r ON rt.rank_id = r.rank_id WHERE rt.crew_id = '.$crew_id.' AND rt.type = '.$type.' AND rt.rank_id = '.$flag_start['rank_id'])->result_array();
        }
        //echo $a = 'SELECT rt.*, r.*  FROM rest_time_crew AS rt INNER JOIN rank AS r ON rt.rank_id = r.rank_id WHERE rt.crew_id = '.$crew_id.' AND rt.type = '.$type.' AND rt.rank_id = '.$flag_start['rank_id'] ; 
        
        $recordLastDay = $this->db->query('SELECT * FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND ( start_rest_time_tsp BETWEEN '.$bw_start.' AND '.$bw_end.' ) ORDER BY id DESC ' )->result_array();
        //echo $a = 'SELECT * FROM rest_time_crew WHERE crew_id = '.$crew_id.' AND type = '.$type.' AND ( start_rest_time_tsp BETWEEN '.$bw_start.' AND '.$bw_end.' ) ORDER BY id DESC ' ; 
        //die("shita");
        
        $date_rest_tst = strtotime($date_rest_format);
        $flag_start_rest_day_tsp = strtotime(date("d-m-Y", strtotime($flag_start['flag_start_rest_day'])));
        
        $data["is_date_start"] = true;
        if($date_rest_tst > $flag_start_rest_day_tsp)
        {
            $data["is_date_start"] = false;
        }
        
        if($recordLastDay && count($record_of_new_rank) >= 1)
        {
            $check_sum_rest = 0;
            foreach($recordLastDay AS $key => $val)
            {
                $check_sum_rest += $val['sum_rest_time'];    
            }
            
            $data["check_sum_rest"] = $check_sum_rest;
            $data["num_record_of_new_rank"] = count($record_of_new_rank);
            
            //var_dump($data);die("abc");
            return $data;
        }
        
    }
    
    
    
}